﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

using Modelo_ETdA.Negocio.AmbienteComercial;
using Modelo_ETdA.Negocio.Analise.Formato;
using Modelo_ETdA.Negocio.Analise;
namespace Modelo_ETdA.Interface
{


    public partial class RegistaFormatoAnalista : Form
    {
        GestorAnalise gestor_analise;
        DataTable tabela = new DataTable();
        MenuAnaliseETdA mAnaEtda;
        AmbienteComercial ambC;

        public RegistaFormatoAnalista(MenuAnaliseETdA menu, GestorAnalise gest_analise, AmbienteComercial ambC)
        {
            InitializeComponent();

            this.gestor_analise = gest_analise;

            mAnaEtda = menu;

            String tipo;
            this.ambC = ambC;
            if (ambC.orientadoZona)
                tipo = "Z";
            else
                tipo = "T";
            List<Divisao> listaZonas = ambC.listDivisao;
            tabela.Columns.Add("Codigo");
            tabela.Columns.Add("Considerações");
            tabela.Columns.Add("Defeito");

            List<Consideracao> consideracoes = gest_analise.consultaListaConsideracao();
            foreach (Divisao div in listaZonas)
            {
                tabela.Columns.Add(tipo + div.CodRelativo + " - " + div.Descricao);
            }

            int i;
            foreach (Consideracao con in consideracoes)
            {
                i = 0;
                DataRow row = tabela.NewRow();
                row[0] = con.Cod;
                row[1] = con.Descricao;
                row[2] = 1;
                while (i < listaZonas.Count)
                {
                    row[i + 3] = 1;
                    i++;
                }
                tabela.Rows.Add(row);
            }


            tabelaMinimos.DataSource = tabela;
            tabelaMinimos.Columns[0].Visible = false;
            tabelaMinimos.Columns[0].ReadOnly = true;
            tabelaMinimos.Columns[1].ReadOnly = true;
        }


        private void registar_Click(object sender, EventArgs e)
        {
            try
            {
                FormatoAvaliacaoAnalista form_av;
                if (nomeForm.TextLength == 0)
                {
                    MessageBox.Show("Não preencheu o nome do formato!", "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    return;
                }
                DocumentoCabecalho doc_cab = new DocumentoCabecalho(nomeForm.Text, "Analista", new DateTime(), 1);

                if (minRuido.TextLength == 0 && maxRuido.TextLength == 0 && minTemp.TextLength == 0 && maxTemp.TextLength == 0 && minLum.TextLength == 0 && maxLum.TextLength == 0)
                {
                    MessageBox.Show("Não preencheu os dados relativos às medidas!", "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    return;
                }

                if (Convert.ToInt32(minRuido.Text) > Convert.ToInt32(maxRuido.Text) || Convert.ToInt32(minTemp.Text) > Convert.ToInt32(maxTemp.Text) || Convert.ToInt32(minLum.Text) > Convert.ToInt32(maxLum.Text))
                {

                    MessageBox.Show("Os dados relativos às medidas são inconsistentes!", "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    return;
                }

                if (Convert.ToInt32(minRuido.Text) < 0){
                    MessageBox.Show("O valor mínimo para o ruído é de 0 db(A)!", "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    return;
                }
                form_av = new FormatoAvaliacaoAnalista(gestor_analise.AmbComercialSessao.Cabeçalho.Cod, nomeForm.Text, Convert.ToInt32(minRuido.Text), Convert.ToInt32(minTemp.Text), Convert.ToInt32(minLum.Text), Convert.ToInt32(maxRuido.Text), Convert.ToInt32(maxTemp.Text), Convert.ToInt32(maxLum.Text), doc_cab);


                //CRIAR CODIGO PARA o REGISTO DAS QUESTOES:
                //CICLO DE form_av.registMin
                int ncolunas = tabela.Columns.Count;
                int nlinhas = tabela.Rows.Count;
                int i = 0, j;
                while (i < nlinhas)
                {
                    j = 3;
                    while (j < ncolunas)
                    {
                        form_av.registMin(-1, j - 2, Convert.ToInt32(tabela.Rows[i][j]), Convert.ToInt32(tabela.Rows[i][0]));
                        j++;
                    }
                    i++;
                }

                int res = gestor_analise.registaFormatoAvaliacao(form_av, 3, gestor_analise.AmbComercialSessao.Cabeçalho.Cod);
                switch (res)
                {
                    case 0:
                        MessageBox.Show("Formato registado com sucesso!", "Sucesso", MessageBoxButtons.OK, MessageBoxIcon.Information);
                        this.Visible = false;
                        mAnaEtda.Visible = true;
                        break;
                    case 2:
                        MessageBox.Show("Nome de formato já registado!", "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error);
                        break;
                    default:
                        MessageBox.Show("Erro ao registar formato!", "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error);
                        this.Visible = false;
                        mAnaEtda.Visible = true;
                        break;
                }
            }
            catch (Exception exp)
            {
                MessageBox.Show("Erro ao registar formato!", "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error);
                this.Visible = false;
                mAnaEtda.Visible = true;
            }

        }

        private void dataGridView1_CellEndEdit(object sender, DataGridViewCellEventArgs e)
        {
            int coluna = e.ColumnIndex, i = 3;
            int linha = e.RowIndex;
            try
            {
                if (Convert.ToInt32(tabelaMinimos.Rows[linha].Cells[coluna].Value) >= 1 && Convert.ToInt32(tabelaMinimos.Rows[linha].Cells[coluna].Value) <= 4)
                {

                    if (coluna == 2)
                    {
                        DataGridViewRow row = tabelaMinimos.Rows[e.RowIndex];

                        while (i < tabelaMinimos.Columns.Count)
                        {
                            row.Cells[i].Value = row.Cells[coluna].Value;
                            i++;
                        }
                    }
                }
                else
                {
                    MessageBox.Show("Valor inserido deve ser entre 1 e 4!", "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    tabelaMinimos.Rows[linha].Cells[coluna].Value = "1";
                }
            }

            catch (Exception ex)
            {
                MessageBox.Show("Valor inserido é inválido!", "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error);
                tabelaMinimos.Rows[linha].Cells[coluna].Value = "";
            }
        }

        private void RegistaFormatoAnalista_FormClosed(object sender, FormClosedEventArgs e)
        {
            mAnaEtda.sair();
        }

        private void voltar_Click(object sender, EventArgs e)
        {
            mAnaEtda.Visible = true;
            this.Visible = false;
        }

        private void RegistaFormatoAnalista_KeyUp(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.Enter)
            {
                registar_Click(this, null);
            }

            if (e.KeyCode == Keys.Back)
            {
                voltar_Click(this, null);
            }
        }



    }
}
